{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tushare as ts\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用tushare包获取某股票的历史行情数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = ts.get_k_data(\"600519\",start=\"2016-01-01\")\n",
    "df.to_csv(\"601318.csv\")  # 中国平安"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>close</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>207.277</td>\n",
       "      <td>199.671</td>\n",
       "      <td>207.277</td>\n",
       "      <td>199.661</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-05</th>\n",
       "      <td>199.671</td>\n",
       "      <td>202.352</td>\n",
       "      <td>203.446</td>\n",
       "      <td>197.303</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-06</th>\n",
       "      <td>202.314</td>\n",
       "      <td>201.744</td>\n",
       "      <td>203.151</td>\n",
       "      <td>199.005</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-07</th>\n",
       "      <td>198.711</td>\n",
       "      <td>192.283</td>\n",
       "      <td>198.711</td>\n",
       "      <td>190.191</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-08</th>\n",
       "      <td>194.128</td>\n",
       "      <td>194.565</td>\n",
       "      <td>197.769</td>\n",
       "      <td>190.163</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-11</th>\n",
       "      <td>193.167</td>\n",
       "      <td>190.030</td>\n",
       "      <td>193.766</td>\n",
       "      <td>189.592</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-12</th>\n",
       "      <td>191.209</td>\n",
       "      <td>187.111</td>\n",
       "      <td>192.160</td>\n",
       "      <td>186.360</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-13</th>\n",
       "      <td>189.307</td>\n",
       "      <td>189.954</td>\n",
       "      <td>195.868</td>\n",
       "      <td>188.832</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-14</th>\n",
       "      <td>187.415</td>\n",
       "      <td>194.746</td>\n",
       "      <td>195.849</td>\n",
       "      <td>185.894</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-15</th>\n",
       "      <td>194.679</td>\n",
       "      <td>189.212</td>\n",
       "      <td>196.039</td>\n",
       "      <td>188.261</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-18</th>\n",
       "      <td>188.261</td>\n",
       "      <td>189.621</td>\n",
       "      <td>192.445</td>\n",
       "      <td>187.501</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-19</th>\n",
       "      <td>191.114</td>\n",
       "      <td>199.899</td>\n",
       "      <td>199.985</td>\n",
       "      <td>190.172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-20</th>\n",
       "      <td>196.819</td>\n",
       "      <td>192.369</td>\n",
       "      <td>199.823</td>\n",
       "      <td>191.123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-21</th>\n",
       "      <td>191.361</td>\n",
       "      <td>190.410</td>\n",
       "      <td>194.527</td>\n",
       "      <td>190.068</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-22</th>\n",
       "      <td>193.120</td>\n",
       "      <td>192.768</td>\n",
       "      <td>193.396</td>\n",
       "      <td>189.031</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-25</th>\n",
       "      <td>193.015</td>\n",
       "      <td>192.797</td>\n",
       "      <td>193.481</td>\n",
       "      <td>191.589</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-26</th>\n",
       "      <td>191.104</td>\n",
       "      <td>189.222</td>\n",
       "      <td>194.413</td>\n",
       "      <td>188.737</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-27</th>\n",
       "      <td>190.144</td>\n",
       "      <td>190.096</td>\n",
       "      <td>191.009</td>\n",
       "      <td>186.074</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-28</th>\n",
       "      <td>189.925</td>\n",
       "      <td>186.968</td>\n",
       "      <td>189.925</td>\n",
       "      <td>185.998</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-29</th>\n",
       "      <td>187.767</td>\n",
       "      <td>190.781</td>\n",
       "      <td>192.540</td>\n",
       "      <td>187.310</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-01</th>\n",
       "      <td>192.160</td>\n",
       "      <td>191.389</td>\n",
       "      <td>192.825</td>\n",
       "      <td>190.058</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-02</th>\n",
       "      <td>192.064</td>\n",
       "      <td>194.489</td>\n",
       "      <td>194.727</td>\n",
       "      <td>190.771</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-03</th>\n",
       "      <td>192.616</td>\n",
       "      <td>193.643</td>\n",
       "      <td>194.499</td>\n",
       "      <td>191.589</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-04</th>\n",
       "      <td>194.727</td>\n",
       "      <td>194.907</td>\n",
       "      <td>195.754</td>\n",
       "      <td>193.529</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-05</th>\n",
       "      <td>194.907</td>\n",
       "      <td>193.842</td>\n",
       "      <td>195.088</td>\n",
       "      <td>192.568</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-15</th>\n",
       "      <td>190.163</td>\n",
       "      <td>190.553</td>\n",
       "      <td>193.015</td>\n",
       "      <td>189.783</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-16</th>\n",
       "      <td>190.695</td>\n",
       "      <td>193.890</td>\n",
       "      <td>197.769</td>\n",
       "      <td>190.695</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-17</th>\n",
       "      <td>193.719</td>\n",
       "      <td>192.350</td>\n",
       "      <td>194.841</td>\n",
       "      <td>190.648</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-18</th>\n",
       "      <td>193.205</td>\n",
       "      <td>191.789</td>\n",
       "      <td>193.586</td>\n",
       "      <td>191.209</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-19</th>\n",
       "      <td>191.703</td>\n",
       "      <td>193.120</td>\n",
       "      <td>193.186</td>\n",
       "      <td>191.237</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-08</th>\n",
       "      <td>1152.000</td>\n",
       "      <td>1159.760</td>\n",
       "      <td>1166.310</td>\n",
       "      <td>1152.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-09</th>\n",
       "      <td>1166.000</td>\n",
       "      <td>1158.500</td>\n",
       "      <td>1169.000</td>\n",
       "      <td>1147.960</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-10</th>\n",
       "      <td>1157.880</td>\n",
       "      <td>1165.000</td>\n",
       "      <td>1181.500</td>\n",
       "      <td>1153.500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-13</th>\n",
       "      <td>1165.000</td>\n",
       "      <td>1162.300</td>\n",
       "      <td>1169.980</td>\n",
       "      <td>1148.500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-14</th>\n",
       "      <td>1176.000</td>\n",
       "      <td>1185.100</td>\n",
       "      <td>1191.550</td>\n",
       "      <td>1166.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-15</th>\n",
       "      <td>1192.000</td>\n",
       "      <td>1189.600</td>\n",
       "      <td>1203.990</td>\n",
       "      <td>1187.100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-16</th>\n",
       "      <td>1192.970</td>\n",
       "      <td>1197.100</td>\n",
       "      <td>1197.100</td>\n",
       "      <td>1184.100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-17</th>\n",
       "      <td>1210.000</td>\n",
       "      <td>1226.000</td>\n",
       "      <td>1234.560</td>\n",
       "      <td>1205.010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-20</th>\n",
       "      <td>1221.000</td>\n",
       "      <td>1227.300</td>\n",
       "      <td>1231.500</td>\n",
       "      <td>1216.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-21</th>\n",
       "      <td>1221.020</td>\n",
       "      <td>1200.000</td>\n",
       "      <td>1223.990</td>\n",
       "      <td>1193.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-22</th>\n",
       "      <td>1206.000</td>\n",
       "      <td>1244.500</td>\n",
       "      <td>1249.500</td>\n",
       "      <td>1202.220</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-23</th>\n",
       "      <td>1250.000</td>\n",
       "      <td>1252.260</td>\n",
       "      <td>1265.680</td>\n",
       "      <td>1247.770</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-24</th>\n",
       "      <td>1248.000</td>\n",
       "      <td>1250.560</td>\n",
       "      <td>1259.890</td>\n",
       "      <td>1235.180</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-27</th>\n",
       "      <td>1257.000</td>\n",
       "      <td>1276.000</td>\n",
       "      <td>1278.170</td>\n",
       "      <td>1250.960</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-28</th>\n",
       "      <td>1285.310</td>\n",
       "      <td>1279.130</td>\n",
       "      <td>1299.940</td>\n",
       "      <td>1271.880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-29</th>\n",
       "      <td>1277.800</td>\n",
       "      <td>1274.900</td>\n",
       "      <td>1288.100</td>\n",
       "      <td>1258.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-30</th>\n",
       "      <td>1271.000</td>\n",
       "      <td>1265.700</td>\n",
       "      <td>1285.010</td>\n",
       "      <td>1258.880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-06</th>\n",
       "      <td>1251.000</td>\n",
       "      <td>1300.000</td>\n",
       "      <td>1300.000</td>\n",
       "      <td>1250.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-07</th>\n",
       "      <td>1299.400</td>\n",
       "      <td>1312.000</td>\n",
       "      <td>1314.990</td>\n",
       "      <td>1293.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-08</th>\n",
       "      <td>1317.000</td>\n",
       "      <td>1314.610</td>\n",
       "      <td>1338.000</td>\n",
       "      <td>1308.510</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-11</th>\n",
       "      <td>1320.000</td>\n",
       "      <td>1323.010</td>\n",
       "      <td>1335.000</td>\n",
       "      <td>1313.670</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-12</th>\n",
       "      <td>1318.000</td>\n",
       "      <td>1333.000</td>\n",
       "      <td>1334.990</td>\n",
       "      <td>1316.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-13</th>\n",
       "      <td>1333.000</td>\n",
       "      <td>1335.950</td>\n",
       "      <td>1337.990</td>\n",
       "      <td>1322.880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-14</th>\n",
       "      <td>1330.000</td>\n",
       "      <td>1326.590</td>\n",
       "      <td>1334.880</td>\n",
       "      <td>1325.110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-15</th>\n",
       "      <td>1329.000</td>\n",
       "      <td>1313.000</td>\n",
       "      <td>1333.500</td>\n",
       "      <td>1301.880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-18</th>\n",
       "      <td>1306.000</td>\n",
       "      <td>1346.210</td>\n",
       "      <td>1351.500</td>\n",
       "      <td>1305.130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-19</th>\n",
       "      <td>1364.000</td>\n",
       "      <td>1346.110</td>\n",
       "      <td>1364.000</td>\n",
       "      <td>1338.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-20</th>\n",
       "      <td>1346.110</td>\n",
       "      <td>1351.000</td>\n",
       "      <td>1359.180</td>\n",
       "      <td>1336.810</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-21</th>\n",
       "      <td>1355.000</td>\n",
       "      <td>1366.100</td>\n",
       "      <td>1371.960</td>\n",
       "      <td>1352.860</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-22</th>\n",
       "      <td>1366.000</td>\n",
       "      <td>1328.200</td>\n",
       "      <td>1366.100</td>\n",
       "      <td>1322.880</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1067 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                open     close      high       low\n",
       "date                                              \n",
       "2016-01-04   207.277   199.671   207.277   199.661\n",
       "2016-01-05   199.671   202.352   203.446   197.303\n",
       "2016-01-06   202.314   201.744   203.151   199.005\n",
       "2016-01-07   198.711   192.283   198.711   190.191\n",
       "2016-01-08   194.128   194.565   197.769   190.163\n",
       "2016-01-11   193.167   190.030   193.766   189.592\n",
       "2016-01-12   191.209   187.111   192.160   186.360\n",
       "2016-01-13   189.307   189.954   195.868   188.832\n",
       "2016-01-14   187.415   194.746   195.849   185.894\n",
       "2016-01-15   194.679   189.212   196.039   188.261\n",
       "2016-01-18   188.261   189.621   192.445   187.501\n",
       "2016-01-19   191.114   199.899   199.985   190.172\n",
       "2016-01-20   196.819   192.369   199.823   191.123\n",
       "2016-01-21   191.361   190.410   194.527   190.068\n",
       "2016-01-22   193.120   192.768   193.396   189.031\n",
       "2016-01-25   193.015   192.797   193.481   191.589\n",
       "2016-01-26   191.104   189.222   194.413   188.737\n",
       "2016-01-27   190.144   190.096   191.009   186.074\n",
       "2016-01-28   189.925   186.968   189.925   185.998\n",
       "2016-01-29   187.767   190.781   192.540   187.310\n",
       "2016-02-01   192.160   191.389   192.825   190.058\n",
       "2016-02-02   192.064   194.489   194.727   190.771\n",
       "2016-02-03   192.616   193.643   194.499   191.589\n",
       "2016-02-04   194.727   194.907   195.754   193.529\n",
       "2016-02-05   194.907   193.842   195.088   192.568\n",
       "2016-02-15   190.163   190.553   193.015   189.783\n",
       "2016-02-16   190.695   193.890   197.769   190.695\n",
       "2016-02-17   193.719   192.350   194.841   190.648\n",
       "2016-02-18   193.205   191.789   193.586   191.209\n",
       "2016-02-19   191.703   193.120   193.186   191.237\n",
       "...              ...       ...       ...       ...\n",
       "2020-04-08  1152.000  1159.760  1166.310  1152.000\n",
       "2020-04-09  1166.000  1158.500  1169.000  1147.960\n",
       "2020-04-10  1157.880  1165.000  1181.500  1153.500\n",
       "2020-04-13  1165.000  1162.300  1169.980  1148.500\n",
       "2020-04-14  1176.000  1185.100  1191.550  1166.000\n",
       "2020-04-15  1192.000  1189.600  1203.990  1187.100\n",
       "2020-04-16  1192.970  1197.100  1197.100  1184.100\n",
       "2020-04-17  1210.000  1226.000  1234.560  1205.010\n",
       "2020-04-20  1221.000  1227.300  1231.500  1216.800\n",
       "2020-04-21  1221.020  1200.000  1223.990  1193.000\n",
       "2020-04-22  1206.000  1244.500  1249.500  1202.220\n",
       "2020-04-23  1250.000  1252.260  1265.680  1247.770\n",
       "2020-04-24  1248.000  1250.560  1259.890  1235.180\n",
       "2020-04-27  1257.000  1276.000  1278.170  1250.960\n",
       "2020-04-28  1285.310  1279.130  1299.940  1271.880\n",
       "2020-04-29  1277.800  1274.900  1288.100  1258.000\n",
       "2020-04-30  1271.000  1265.700  1285.010  1258.880\n",
       "2020-05-06  1251.000  1300.000  1300.000  1250.000\n",
       "2020-05-07  1299.400  1312.000  1314.990  1293.000\n",
       "2020-05-08  1317.000  1314.610  1338.000  1308.510\n",
       "2020-05-11  1320.000  1323.010  1335.000  1313.670\n",
       "2020-05-12  1318.000  1333.000  1334.990  1316.000\n",
       "2020-05-13  1333.000  1335.950  1337.990  1322.880\n",
       "2020-05-14  1330.000  1326.590  1334.880  1325.110\n",
       "2020-05-15  1329.000  1313.000  1333.500  1301.880\n",
       "2020-05-18  1306.000  1346.210  1351.500  1305.130\n",
       "2020-05-19  1364.000  1346.110  1364.000  1338.000\n",
       "2020-05-20  1346.110  1351.000  1359.180  1336.810\n",
       "2020-05-21  1355.000  1366.100  1371.960  1352.860\n",
       "2020-05-22  1366.000  1328.200  1366.100  1322.880\n",
       "\n",
       "[1067 rows x 4 columns]"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 用date作为索引，只要需要的open（开盘价）、close（收盘价）、high（最高价）、low（最低价）\n",
    "df = pd.read_csv(\"601318.csv\", index_col=\"date\",parse_dates=['date'])[['open','close','high','low']]\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用pandas包计算改股票历史数据的5日均线和30日均线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>close</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>ma5</th>\n",
       "      <th>ma30</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>207.277</td>\n",
       "      <td>199.671</td>\n",
       "      <td>207.277</td>\n",
       "      <td>199.661</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-05</th>\n",
       "      <td>199.671</td>\n",
       "      <td>202.352</td>\n",
       "      <td>203.446</td>\n",
       "      <td>197.303</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-06</th>\n",
       "      <td>202.314</td>\n",
       "      <td>201.744</td>\n",
       "      <td>203.151</td>\n",
       "      <td>199.005</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-07</th>\n",
       "      <td>198.711</td>\n",
       "      <td>192.283</td>\n",
       "      <td>198.711</td>\n",
       "      <td>190.191</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-08</th>\n",
       "      <td>194.128</td>\n",
       "      <td>194.565</td>\n",
       "      <td>197.769</td>\n",
       "      <td>190.163</td>\n",
       "      <td>200.4202</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-11</th>\n",
       "      <td>193.167</td>\n",
       "      <td>190.030</td>\n",
       "      <td>193.766</td>\n",
       "      <td>189.592</td>\n",
       "      <td>197.5982</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-12</th>\n",
       "      <td>191.209</td>\n",
       "      <td>187.111</td>\n",
       "      <td>192.160</td>\n",
       "      <td>186.360</td>\n",
       "      <td>195.9058</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-13</th>\n",
       "      <td>189.307</td>\n",
       "      <td>189.954</td>\n",
       "      <td>195.868</td>\n",
       "      <td>188.832</td>\n",
       "      <td>193.3044</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-14</th>\n",
       "      <td>187.415</td>\n",
       "      <td>194.746</td>\n",
       "      <td>195.849</td>\n",
       "      <td>185.894</td>\n",
       "      <td>191.0452</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-15</th>\n",
       "      <td>194.679</td>\n",
       "      <td>189.212</td>\n",
       "      <td>196.039</td>\n",
       "      <td>188.261</td>\n",
       "      <td>191.1554</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-18</th>\n",
       "      <td>188.261</td>\n",
       "      <td>189.621</td>\n",
       "      <td>192.445</td>\n",
       "      <td>187.501</td>\n",
       "      <td>190.1742</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-19</th>\n",
       "      <td>191.114</td>\n",
       "      <td>199.899</td>\n",
       "      <td>199.985</td>\n",
       "      <td>190.172</td>\n",
       "      <td>190.1552</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-20</th>\n",
       "      <td>196.819</td>\n",
       "      <td>192.369</td>\n",
       "      <td>199.823</td>\n",
       "      <td>191.123</td>\n",
       "      <td>191.6576</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-21</th>\n",
       "      <td>191.361</td>\n",
       "      <td>190.410</td>\n",
       "      <td>194.527</td>\n",
       "      <td>190.068</td>\n",
       "      <td>192.4468</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-22</th>\n",
       "      <td>193.120</td>\n",
       "      <td>192.768</td>\n",
       "      <td>193.396</td>\n",
       "      <td>189.031</td>\n",
       "      <td>192.1350</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-25</th>\n",
       "      <td>193.015</td>\n",
       "      <td>192.797</td>\n",
       "      <td>193.481</td>\n",
       "      <td>191.589</td>\n",
       "      <td>193.0858</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-26</th>\n",
       "      <td>191.104</td>\n",
       "      <td>189.222</td>\n",
       "      <td>194.413</td>\n",
       "      <td>188.737</td>\n",
       "      <td>193.0838</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-27</th>\n",
       "      <td>190.144</td>\n",
       "      <td>190.096</td>\n",
       "      <td>191.009</td>\n",
       "      <td>186.074</td>\n",
       "      <td>191.7488</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-28</th>\n",
       "      <td>189.925</td>\n",
       "      <td>186.968</td>\n",
       "      <td>189.925</td>\n",
       "      <td>185.998</td>\n",
       "      <td>191.4616</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-29</th>\n",
       "      <td>187.767</td>\n",
       "      <td>190.781</td>\n",
       "      <td>192.540</td>\n",
       "      <td>187.310</td>\n",
       "      <td>190.3910</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-01</th>\n",
       "      <td>192.160</td>\n",
       "      <td>191.389</td>\n",
       "      <td>192.825</td>\n",
       "      <td>190.058</td>\n",
       "      <td>190.2200</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-02</th>\n",
       "      <td>192.064</td>\n",
       "      <td>194.489</td>\n",
       "      <td>194.727</td>\n",
       "      <td>190.771</td>\n",
       "      <td>190.4120</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-03</th>\n",
       "      <td>192.616</td>\n",
       "      <td>193.643</td>\n",
       "      <td>194.499</td>\n",
       "      <td>191.589</td>\n",
       "      <td>190.9064</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-04</th>\n",
       "      <td>194.727</td>\n",
       "      <td>194.907</td>\n",
       "      <td>195.754</td>\n",
       "      <td>193.529</td>\n",
       "      <td>191.8668</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-05</th>\n",
       "      <td>194.907</td>\n",
       "      <td>193.842</td>\n",
       "      <td>195.088</td>\n",
       "      <td>192.568</td>\n",
       "      <td>193.2948</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-15</th>\n",
       "      <td>190.163</td>\n",
       "      <td>190.553</td>\n",
       "      <td>193.015</td>\n",
       "      <td>189.783</td>\n",
       "      <td>192.8954</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-16</th>\n",
       "      <td>190.695</td>\n",
       "      <td>193.890</td>\n",
       "      <td>197.769</td>\n",
       "      <td>190.695</td>\n",
       "      <td>192.6216</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-17</th>\n",
       "      <td>193.719</td>\n",
       "      <td>192.350</td>\n",
       "      <td>194.841</td>\n",
       "      <td>190.648</td>\n",
       "      <td>192.8422</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-18</th>\n",
       "      <td>193.205</td>\n",
       "      <td>191.789</td>\n",
       "      <td>193.586</td>\n",
       "      <td>191.209</td>\n",
       "      <td>192.5378</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-19</th>\n",
       "      <td>191.703</td>\n",
       "      <td>193.120</td>\n",
       "      <td>193.186</td>\n",
       "      <td>191.237</td>\n",
       "      <td>191.8970</td>\n",
       "      <td>193.215567</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-08</th>\n",
       "      <td>1152.000</td>\n",
       "      <td>1159.760</td>\n",
       "      <td>1166.310</td>\n",
       "      <td>1152.000</td>\n",
       "      <td>1134.7960</td>\n",
       "      <td>1090.831667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-09</th>\n",
       "      <td>1166.000</td>\n",
       "      <td>1158.500</td>\n",
       "      <td>1169.000</td>\n",
       "      <td>1147.960</td>\n",
       "      <td>1144.5960</td>\n",
       "      <td>1094.298333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-10</th>\n",
       "      <td>1157.880</td>\n",
       "      <td>1165.000</td>\n",
       "      <td>1181.500</td>\n",
       "      <td>1153.500</td>\n",
       "      <td>1155.3720</td>\n",
       "      <td>1097.027667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-13</th>\n",
       "      <td>1165.000</td>\n",
       "      <td>1162.300</td>\n",
       "      <td>1169.980</td>\n",
       "      <td>1148.500</td>\n",
       "      <td>1160.5660</td>\n",
       "      <td>1100.184333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-14</th>\n",
       "      <td>1176.000</td>\n",
       "      <td>1185.100</td>\n",
       "      <td>1191.550</td>\n",
       "      <td>1166.000</td>\n",
       "      <td>1163.3760</td>\n",
       "      <td>1104.380667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-15</th>\n",
       "      <td>1192.000</td>\n",
       "      <td>1189.600</td>\n",
       "      <td>1203.990</td>\n",
       "      <td>1187.100</td>\n",
       "      <td>1171.3760</td>\n",
       "      <td>1107.514000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-16</th>\n",
       "      <td>1192.970</td>\n",
       "      <td>1197.100</td>\n",
       "      <td>1197.100</td>\n",
       "      <td>1184.100</td>\n",
       "      <td>1176.7700</td>\n",
       "      <td>1109.779667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-17</th>\n",
       "      <td>1210.000</td>\n",
       "      <td>1226.000</td>\n",
       "      <td>1234.560</td>\n",
       "      <td>1205.010</td>\n",
       "      <td>1187.1940</td>\n",
       "      <td>1112.236000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-20</th>\n",
       "      <td>1221.000</td>\n",
       "      <td>1227.300</td>\n",
       "      <td>1231.500</td>\n",
       "      <td>1216.800</td>\n",
       "      <td>1198.3940</td>\n",
       "      <td>1114.169333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-21</th>\n",
       "      <td>1221.020</td>\n",
       "      <td>1200.000</td>\n",
       "      <td>1223.990</td>\n",
       "      <td>1193.000</td>\n",
       "      <td>1207.3980</td>\n",
       "      <td>1117.036667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-22</th>\n",
       "      <td>1206.000</td>\n",
       "      <td>1244.500</td>\n",
       "      <td>1249.500</td>\n",
       "      <td>1202.220</td>\n",
       "      <td>1210.1980</td>\n",
       "      <td>1120.136667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-23</th>\n",
       "      <td>1250.000</td>\n",
       "      <td>1252.260</td>\n",
       "      <td>1265.680</td>\n",
       "      <td>1247.770</td>\n",
       "      <td>1221.6040</td>\n",
       "      <td>1123.286667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-24</th>\n",
       "      <td>1248.000</td>\n",
       "      <td>1250.560</td>\n",
       "      <td>1259.890</td>\n",
       "      <td>1235.180</td>\n",
       "      <td>1229.2040</td>\n",
       "      <td>1126.846000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-27</th>\n",
       "      <td>1257.000</td>\n",
       "      <td>1276.000</td>\n",
       "      <td>1278.170</td>\n",
       "      <td>1250.960</td>\n",
       "      <td>1236.4040</td>\n",
       "      <td>1132.412667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-28</th>\n",
       "      <td>1285.310</td>\n",
       "      <td>1279.130</td>\n",
       "      <td>1299.940</td>\n",
       "      <td>1271.880</td>\n",
       "      <td>1249.2620</td>\n",
       "      <td>1138.457000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-29</th>\n",
       "      <td>1277.800</td>\n",
       "      <td>1274.900</td>\n",
       "      <td>1288.100</td>\n",
       "      <td>1258.000</td>\n",
       "      <td>1263.6220</td>\n",
       "      <td>1145.883667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-04-30</th>\n",
       "      <td>1271.000</td>\n",
       "      <td>1265.700</td>\n",
       "      <td>1285.010</td>\n",
       "      <td>1258.880</td>\n",
       "      <td>1267.8220</td>\n",
       "      <td>1153.583667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-06</th>\n",
       "      <td>1251.000</td>\n",
       "      <td>1300.000</td>\n",
       "      <td>1300.000</td>\n",
       "      <td>1250.000</td>\n",
       "      <td>1268.4220</td>\n",
       "      <td>1162.150667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-07</th>\n",
       "      <td>1299.400</td>\n",
       "      <td>1312.000</td>\n",
       "      <td>1314.990</td>\n",
       "      <td>1293.000</td>\n",
       "      <td>1276.9020</td>\n",
       "      <td>1171.764000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-08</th>\n",
       "      <td>1317.000</td>\n",
       "      <td>1314.610</td>\n",
       "      <td>1338.000</td>\n",
       "      <td>1308.510</td>\n",
       "      <td>1283.2400</td>\n",
       "      <td>1182.330667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-11</th>\n",
       "      <td>1320.000</td>\n",
       "      <td>1323.010</td>\n",
       "      <td>1335.000</td>\n",
       "      <td>1313.670</td>\n",
       "      <td>1291.6800</td>\n",
       "      <td>1191.564000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-12</th>\n",
       "      <td>1318.000</td>\n",
       "      <td>1333.000</td>\n",
       "      <td>1334.990</td>\n",
       "      <td>1316.000</td>\n",
       "      <td>1301.0800</td>\n",
       "      <td>1199.231333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-13</th>\n",
       "      <td>1333.000</td>\n",
       "      <td>1335.950</td>\n",
       "      <td>1337.990</td>\n",
       "      <td>1322.880</td>\n",
       "      <td>1317.4800</td>\n",
       "      <td>1207.887000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-14</th>\n",
       "      <td>1330.000</td>\n",
       "      <td>1326.590</td>\n",
       "      <td>1334.880</td>\n",
       "      <td>1325.110</td>\n",
       "      <td>1323.6000</td>\n",
       "      <td>1216.053667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-15</th>\n",
       "      <td>1329.000</td>\n",
       "      <td>1313.000</td>\n",
       "      <td>1333.500</td>\n",
       "      <td>1301.880</td>\n",
       "      <td>1326.0000</td>\n",
       "      <td>1225.012000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-18</th>\n",
       "      <td>1306.000</td>\n",
       "      <td>1346.210</td>\n",
       "      <td>1351.500</td>\n",
       "      <td>1305.130</td>\n",
       "      <td>1323.2000</td>\n",
       "      <td>1232.478667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-19</th>\n",
       "      <td>1364.000</td>\n",
       "      <td>1346.110</td>\n",
       "      <td>1364.000</td>\n",
       "      <td>1338.000</td>\n",
       "      <td>1332.4000</td>\n",
       "      <td>1240.712000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-20</th>\n",
       "      <td>1346.110</td>\n",
       "      <td>1351.000</td>\n",
       "      <td>1359.180</td>\n",
       "      <td>1336.810</td>\n",
       "      <td>1335.0220</td>\n",
       "      <td>1248.782333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-21</th>\n",
       "      <td>1355.000</td>\n",
       "      <td>1366.100</td>\n",
       "      <td>1371.960</td>\n",
       "      <td>1352.860</td>\n",
       "      <td>1340.0220</td>\n",
       "      <td>1255.981333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-05-22</th>\n",
       "      <td>1366.000</td>\n",
       "      <td>1328.200</td>\n",
       "      <td>1366.100</td>\n",
       "      <td>1322.880</td>\n",
       "      <td>1347.4220</td>\n",
       "      <td>1262.783000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1067 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                open     close      high       low        ma5         ma30\n",
       "date                                                                      \n",
       "2016-01-04   207.277   199.671   207.277   199.661        NaN          NaN\n",
       "2016-01-05   199.671   202.352   203.446   197.303        NaN          NaN\n",
       "2016-01-06   202.314   201.744   203.151   199.005        NaN          NaN\n",
       "2016-01-07   198.711   192.283   198.711   190.191        NaN          NaN\n",
       "2016-01-08   194.128   194.565   197.769   190.163   200.4202          NaN\n",
       "2016-01-11   193.167   190.030   193.766   189.592   197.5982          NaN\n",
       "2016-01-12   191.209   187.111   192.160   186.360   195.9058          NaN\n",
       "2016-01-13   189.307   189.954   195.868   188.832   193.3044          NaN\n",
       "2016-01-14   187.415   194.746   195.849   185.894   191.0452          NaN\n",
       "2016-01-15   194.679   189.212   196.039   188.261   191.1554          NaN\n",
       "2016-01-18   188.261   189.621   192.445   187.501   190.1742          NaN\n",
       "2016-01-19   191.114   199.899   199.985   190.172   190.1552          NaN\n",
       "2016-01-20   196.819   192.369   199.823   191.123   191.6576          NaN\n",
       "2016-01-21   191.361   190.410   194.527   190.068   192.4468          NaN\n",
       "2016-01-22   193.120   192.768   193.396   189.031   192.1350          NaN\n",
       "2016-01-25   193.015   192.797   193.481   191.589   193.0858          NaN\n",
       "2016-01-26   191.104   189.222   194.413   188.737   193.0838          NaN\n",
       "2016-01-27   190.144   190.096   191.009   186.074   191.7488          NaN\n",
       "2016-01-28   189.925   186.968   189.925   185.998   191.4616          NaN\n",
       "2016-01-29   187.767   190.781   192.540   187.310   190.3910          NaN\n",
       "2016-02-01   192.160   191.389   192.825   190.058   190.2200          NaN\n",
       "2016-02-02   192.064   194.489   194.727   190.771   190.4120          NaN\n",
       "2016-02-03   192.616   193.643   194.499   191.589   190.9064          NaN\n",
       "2016-02-04   194.727   194.907   195.754   193.529   191.8668          NaN\n",
       "2016-02-05   194.907   193.842   195.088   192.568   193.2948          NaN\n",
       "2016-02-15   190.163   190.553   193.015   189.783   192.8954          NaN\n",
       "2016-02-16   190.695   193.890   197.769   190.695   192.6216          NaN\n",
       "2016-02-17   193.719   192.350   194.841   190.648   192.8422          NaN\n",
       "2016-02-18   193.205   191.789   193.586   191.209   192.5378          NaN\n",
       "2016-02-19   191.703   193.120   193.186   191.237   191.8970   193.215567\n",
       "...              ...       ...       ...       ...        ...          ...\n",
       "2020-04-08  1152.000  1159.760  1166.310  1152.000  1134.7960  1090.831667\n",
       "2020-04-09  1166.000  1158.500  1169.000  1147.960  1144.5960  1094.298333\n",
       "2020-04-10  1157.880  1165.000  1181.500  1153.500  1155.3720  1097.027667\n",
       "2020-04-13  1165.000  1162.300  1169.980  1148.500  1160.5660  1100.184333\n",
       "2020-04-14  1176.000  1185.100  1191.550  1166.000  1163.3760  1104.380667\n",
       "2020-04-15  1192.000  1189.600  1203.990  1187.100  1171.3760  1107.514000\n",
       "2020-04-16  1192.970  1197.100  1197.100  1184.100  1176.7700  1109.779667\n",
       "2020-04-17  1210.000  1226.000  1234.560  1205.010  1187.1940  1112.236000\n",
       "2020-04-20  1221.000  1227.300  1231.500  1216.800  1198.3940  1114.169333\n",
       "2020-04-21  1221.020  1200.000  1223.990  1193.000  1207.3980  1117.036667\n",
       "2020-04-22  1206.000  1244.500  1249.500  1202.220  1210.1980  1120.136667\n",
       "2020-04-23  1250.000  1252.260  1265.680  1247.770  1221.6040  1123.286667\n",
       "2020-04-24  1248.000  1250.560  1259.890  1235.180  1229.2040  1126.846000\n",
       "2020-04-27  1257.000  1276.000  1278.170  1250.960  1236.4040  1132.412667\n",
       "2020-04-28  1285.310  1279.130  1299.940  1271.880  1249.2620  1138.457000\n",
       "2020-04-29  1277.800  1274.900  1288.100  1258.000  1263.6220  1145.883667\n",
       "2020-04-30  1271.000  1265.700  1285.010  1258.880  1267.8220  1153.583667\n",
       "2020-05-06  1251.000  1300.000  1300.000  1250.000  1268.4220  1162.150667\n",
       "2020-05-07  1299.400  1312.000  1314.990  1293.000  1276.9020  1171.764000\n",
       "2020-05-08  1317.000  1314.610  1338.000  1308.510  1283.2400  1182.330667\n",
       "2020-05-11  1320.000  1323.010  1335.000  1313.670  1291.6800  1191.564000\n",
       "2020-05-12  1318.000  1333.000  1334.990  1316.000  1301.0800  1199.231333\n",
       "2020-05-13  1333.000  1335.950  1337.990  1322.880  1317.4800  1207.887000\n",
       "2020-05-14  1330.000  1326.590  1334.880  1325.110  1323.6000  1216.053667\n",
       "2020-05-15  1329.000  1313.000  1333.500  1301.880  1326.0000  1225.012000\n",
       "2020-05-18  1306.000  1346.210  1351.500  1305.130  1323.2000  1232.478667\n",
       "2020-05-19  1364.000  1346.110  1364.000  1338.000  1332.4000  1240.712000\n",
       "2020-05-20  1346.110  1351.000  1359.180  1336.810  1335.0220  1248.782333\n",
       "2020-05-21  1355.000  1366.100  1371.960  1352.860  1340.0220  1255.981333\n",
       "2020-05-22  1366.000  1328.200  1366.100  1322.880  1347.4220  1262.783000\n",
       "\n",
       "[1067 rows x 6 columns]"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['ma5'] = df['open'].rolling(5).mean()  # 求5日均线\n",
    "df['ma30'] = df['open'].rolling(30).mean()  # 求30日均线\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用matplotlib包可视化历史数据的收盘价和两条均线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_show = df[:100]\n",
    "df_show[['close','ma5','ma30']].plot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分析输出所有金叉日期和死叉日期"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = df.dropna()  # 去掉缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2016-08-09', '2016-08-19', '2016-11-21', '2017-07-07',\n",
       "               '2017-09-11', '2017-11-30', '2018-02-05', '2018-03-28',\n",
       "               '2018-06-29', '2018-07-24', '2018-08-02', '2018-10-15',\n",
       "               '2018-12-25', '2019-05-10', '2019-07-22', '2019-11-29',\n",
       "               '2020-02-28', '2020-03-18'],\n",
       "              dtype='datetime64[ns]', name='date', freq=None)"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ma5_low_ma30 = df['ma5'] < df['ma30']  # 表示下降，返回bool值\n",
    "ma5_high_ma30 = df['ma5'] >= df['ma30']  # 表示上升\n",
    "# 第一段得出来的假设是TTFFTT，第二段肯定是FFTTTFF，如下：\n",
    "# TTFFTT\n",
    "# FFTTFF，那么第二段后退一位：\n",
    "# TTFFTT\n",
    "#  FFTTFF，那么当两段都是F时，就是金叉，两个都是T时就是死叉\n",
    "death_cross = df[ma5_low_ma30 & ma5_high_ma30.shift(1)].index\n",
    "# -(ma5_low_ma30 | ma5_high_ma30.shift(1)：取反(如果有一个是T)，那就是金叉\n",
    "golden_cross = df[-(ma5_low_ma30 | ma5_high_ma30.shift(1))].index\n",
    "death_cross"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 假如我从2010年1月1日开始，初始资金为100000元，金叉尽量买入，死叉全部卖出，则到今天位置，我的炒股收益率如何？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "date\n",
       "2016-02-22    1\n",
       "2016-08-09    0\n",
       "2016-08-11    1\n",
       "2016-08-19    0\n",
       "2016-10-14    1\n",
       "2016-11-21    0\n",
       "2016-11-28    1\n",
       "2017-07-07    0\n",
       "2017-07-25    1\n",
       "2017-09-11    0\n",
       "2017-09-19    1\n",
       "2017-11-30    0\n",
       "2017-12-15    1\n",
       "2018-02-05    0\n",
       "2018-03-19    1\n",
       "2018-03-28    0\n",
       "2018-05-10    1\n",
       "2018-06-29    0\n",
       "2018-07-19    1\n",
       "2018-07-24    0\n",
       "2018-07-26    1\n",
       "2018-08-02    0\n",
       "2018-09-21    1\n",
       "2018-10-15    0\n",
       "2018-12-04    1\n",
       "2018-12-25    0\n",
       "2019-01-03    1\n",
       "2019-05-10    0\n",
       "2019-06-17    1\n",
       "2019-07-22    0\n",
       "2019-08-13    1\n",
       "2019-11-29    0\n",
       "2020-02-19    1\n",
       "2020-02-28    0\n",
       "2020-03-04    1\n",
       "2020-03-18    0\n",
       "2020-04-02    1\n",
       "dtype: int64"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sr1 = pd.Series(1, index=golden_cross)  # 1表示金叉\n",
    "sr2 = pd.Series(0, index=death_cross)  # 0表示死叉\n",
    "sr = sr1.append(sr2).sort_index()  # 合并到一起，以时间合并\n",
    "sr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4年多,利用双均线策略，启动资金100000赚了327069元\n"
     ]
    }
   ],
   "source": [
    "first_money = 100000  # 启动资金，这个是方便与简单策略作比较\n",
    "money = first_money\n",
    "hold = 0  # 持有多少股\n",
    "for i in range(0, len(sr)):\n",
    "    p = df['open'][sr.index[i]]  # 表示当天的价格\n",
    "    if sr.iloc[i] == 1:\n",
    "        # 金叉\n",
    "        buy = (money // (100 * p))  # 买一手（一手=100）\n",
    "        hold += buy * 100\n",
    "        money -= buy * 100 * p\n",
    "    else:\n",
    "        money += hold *p # 死叉的时候卖出\n",
    "        hold = 0\n",
    "now_p = df['open'][-1]\n",
    "now_money = hold * now_p + money\n",
    "\n",
    "print('4年多,利用双均线策略，启动资金%d赚了%d元'%(first_money, now_money - first_money))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 当然简单的双均线是不够的"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
